package entity

import dom "a-common/domain"

var (
	STATUS_UNPAY   STATUS = "0" // 待支付
	STATUS_ORVER   STATUS = "1" // 已完成
	STATUS_CANCEL  STATUS = "2" // 已取消
	STATUS_LOCKED  STATUS = "3" // 已锁定
	STATUS_REVOKED STATUS = "4" // 已退款

	// 事件
	EVENT_CREATE  = "Create Payment"  // 创建支付
	EVENT_OVER    = "Over Payment"    // 完成支付
	EVENT_CANCEL  = "Cancel Payment"  // 取消支付
	EVENT_REFUND  = "Refund Payment"  // 退款
	EVENT_LOCKING = "Locking Payment" // 锁定订单(禁止支付)

	// 支付商
	VENDOR_SYS          VENDOR = "SYSTEM"   // 系统支付
	VENDOR_SYS_CARD     string = "card"     // 充电卡
	VENDOR_SYS_INTEGRAL string = "integral" // 积分

	VENDOR_ALI        VENDOR = "ALIPAY" // 支付宝
	VENDOR_ALI_ALIPAY string = "alipay"

	VENDOR_Wx       VENDOR = "WEPAY" // 微信
	VENDOR_Wx_WEPAY string = "wepay"

	// 支付终端
	TERMINAL_APP TERMINAL = "App" // APP
	TERMINAL_WEB TERMINAL = "QR"  // QR
	TERMINAL_H5  TERMINAL = "H5"  // H5
	TERMINAL_POS TERMINAL = "POS" // POS

	ORDER_B = 10 // 支付订单
	ORDER_R = 11 // 充值订单
	ORDER_C = 22 // 充电订单

	// 币种
	CURRENCY_RMB = "RMB" // 人民币
	CURRENCY_HK  = "HK"  // 港币
)

type TERMINAL string
type VENDOR string
type STATUS string

// PayRecord 支付订单表
type PayRecord struct {
	RecordId   int64  `xorm:"pk autoincr notnull"`      // 支付ID
	OutTradeNo int64  `xorm:"notnull"`                  // 交易号(OutTradeNo)
	OrderNo    int64  `xorm:"notnull"`                  // 订单编号(关联订单编号)
	PayStatus  STATUS `xorm:"varchar(1) default('0')"`  // 支付状态(待支付、完成、取消、锁定、退款)
	Amount     int64  `xorm:"default(0)"`               // 金额(单位:分)
	Currency   string `xorm:"varchar(10) default('0')"` // 币种(RMB, ...)

	Terminal       TERMINAL `xorm:"varchar(20) notnull"` // 支付终端(App、QR、H5)
	Vendor         VENDOR   `xorm:"varchar(20) notnull"` // 支付商(第三方支付)
	Channel        string   `xorm:"varchar(20)"`         // 支付渠道(由支付商定义)
	Wallet         string   `xorm:"varchar(20)"`         // 钱包(由支付商定义)
	TradeNo        string   `xorm:"varchar(64)"`         // 交易凭证号(由支付商定义)
	Callback       string   `xorm:"text"`                // 支付回调
	Polling        string   `xorm:"text"`                // 支付轮询结果
	RecordLog      string   `xorm:"text"`                // 节点日志
	dom.BaseStruct `xorm:"extends"`
}

// PayRecordVo 映射
type PayRecordVo struct {
	RecordId   uint   `json:"recordId,omitempty" xorm:"pk"`
	OutTradeNo string `json:"outTradeNo,omitempty"`
	OrderNo    string `json:"orderNo,omitempty"`
	PayStatus  string `json:"payStatus,omitempty"`
	Amount     int64  `json:"amount,omitempty"`
	Currency   string `json:"currency,omitempty"`

	Terminal TERMINAL `json:"terminal,omitempty"`
	Vendor   VENDOR   `json:"vendor,omitempty"`
	Channel  string   `json:"channel,omitempty"`
	Wallet   string   `json:"wallet,omitempty"`
	TradeNo  string   `json:"tradeNo,omitempty"`
	Callback string   `json:"callback,omitempty"`
	Polling  string   `json:"polling,omitempty"`
	PayLog   string   `json:"PayLog,omitempty"`
}

// PayRecordPageVo 页面
type PayRecordPageVo struct {
	PayRecordVo  `xorm:"extends"`
	dom.BaseJson `xorm:"extends"`
}

// PayRecordDto 传输
type PayRecordDto struct {
	PayRecordPageVo
	dom.BaseJson
	dom.PageDto
}

func (m *PayRecordDto) Validator() error {
	if m.PageNum < 1 {
		m.PageNum = 1
	}
	if m.PageSize < 1 {
		m.PageSize = 10
	}
	return nil
}

// PayRecordExportVo 导出
type PayRecordExportVo struct {
	PostId   uint   `excel:"name:订单ID;" xorm:"pk"`
	PostCode string `excel:"name:订单编码;"`
	PostName string `excel:"name:订单名称;"`
	PostSort int    `excel:"name:订单排序;"`
	Status   string `excel:"name:状态;replace:0_正常,1_停用;"`
}
